package com.tc.service;

import com.tc.domain.Insured_person;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tc.dto.Insured_personDTO;
import com.tc.dto.Insured_personQueryDTO;
import com.tc.vo.Hospital_reimbursement_ratioVO;
import com.tc.vo.PageResultVO;
import com.tc.vo.PatientReimbursementRatioVO;
import com.tc.vo.Insured_personVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 *  被保险人服务类
 * </p>
 *
 * @author jcd
 * @since 2025-07-09
 */
public interface IInsured_personService extends IService<Insured_person> {

    /**
     * 分页查询被保险人信息
     *
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    PageResultVO<Insured_personVO> pageQuery(Insured_personQueryDTO queryDTO);
    
    /**
     * 根据ID获取被保险人信息
     *
     * @param id 被保险人ID
     * @return 被保险人信息
     */
    Insured_personVO getInsuredPersonById(Long id);
    
    /**
     * 新增被保险人
     *
     * @param insuredPersonDTO 被保险人信息
     * @return 是否成功
     */
    boolean addInsuredPerson(Insured_personDTO insuredPersonDTO);
    
    /**
     * 修改被保险人信息
     *
     * @param insuredPersonDTO 被保险人信息
     * @return 是否成功
     */
    boolean updateInsuredPerson(Insured_personDTO insuredPersonDTO);
    
    /**
     * 删除被保险人
     *
     * @param id 被保险人ID
     * @return 是否成功
     */
    boolean deleteInsuredPerson(Long id);
    
    /**
     * 根据患者ID查询医保报销比例
     * 
     * @param patientId 患者ID
     * @return 医保报销比例信息列表
     */
    List<PatientReimbursementRatioVO> getReimbursementRatioByPatientId(Long patientId);
    
    /**
     * 根据医院等级、人员类型和费用金额查询医保报销比例
     * 
     * @param hospitalLevel 医院等级
     * @param personType 人员类型
     * @param cost 费用金额
     * @return 医保报销比例
     */
//    BigDecimal getReimbursementRatio(String hospitalLevel, String personType, BigDecimal cost);
    // 修改方法签名
    Hospital_reimbursement_ratioVO getReimbursementRatio(String hospitalLevel, String personType, BigDecimal cost);
}
